package cn.ronghuanet.base.exception;

import org.apache.commons.lang3.StringUtils;
import java.util.Collection;
import java.util.Objects;

/**
 * 断言工具类
 * 当断言某个对象为空时,对象不为空就要报错
 */
public class RonghuaAssert {

    /**
     * lang3包里面,判断字符串是否为空isBlank  isEmpty,它们两的区别是什么??
     * "       " isEmpty认为这个字符串不为空
     * isBlank认为这个字符串为空,因为这个方法会遍历字符串中每个字符,判断是否是空字符串
     */

    // 断言字符串为空
    public static void isBlank(String str,String message){
        // 那么当字符串不为空,就要抛出异常
        if(StringUtils.isNotBlank(str)){
            throw new BusinessException(message);
        }
    }

    // 断言字符串不为空
    public static void isNotBlank(String str,String message){
        // 那么当字符串为空,就要抛出异常
        if(StringUtils.isBlank(str)){
            throw new BusinessException(message);
        }
    }

    // 断言对象为空
    public static void isNull(Object obj,String message){
        if(Objects.nonNull(obj)){
            throw new BusinessException(message);
        }
    }

    // 断言对象不为空
    public static void isNotNull(Object obj,String message){
        if(Objects.isNull(obj)){
            throw new BusinessException(message);
        }
    }

    // 断言集合为空
    public static void isNull(Collection coll,String message){
        // 当集合不为空且长度>0的时候,抛出异常
        if(coll != null && coll.size() > 0){
            throw new BusinessException(message);
        }
    }

    // 断言集合不为空
    public static void isNotNull(Collection coll,String message){
        // 当集合为空 或者 集合的长度=0,抛出异常
        if(coll == null || coll.size() == 0){
            throw new BusinessException(message);
        }
    }


    // 断言两个字符串相等
    public static void isEq(String str1,String str2,String message){
        if(!str1.equals(str2)){
            throw new BusinessException(message);
        }
    }

    //===============================上面的方法都是直接指定错误信息=====================================
    //===============================下面的方法,在抛出异常时,不仅需要错误信息,还需要错误码=====================================


    // 断言字符串为空
    public static void isBlank(String str,ResponseCode responseCode){
        // 那么当字符串不为空,就要抛出异常
        if(StringUtils.isNotBlank(str)){
            throw new BusinessException(responseCode);
        }
    }

    // 断言字符串不为空
    public static void isNotBlank(String str,ResponseCode responseCode){
        // 那么当字符串为空,就要抛出异常
        if(StringUtils.isBlank(str)){
            throw new BusinessException(responseCode);
        }
    }

    // 断言对象为空
    public static void isNull(Object obj,ResponseCode responseCode){
        if(Objects.nonNull(obj)){
            throw new BusinessException(responseCode);
        }
    }

    // 断言对象不为空
    public static void isNotNull(Object obj,ResponseCode responseCode){
        if(Objects.isNull(obj)){
            throw new BusinessException(responseCode);
        }
    }

    // 断言集合为空
    public static void isNull(Collection coll,ResponseCode responseCode){
        // 当集合不为空且长度>0的时候,抛出异常
        if(coll != null && coll.size() > 0){
            throw new BusinessException(responseCode);
        }
    }

    // 断言集合不为空
    public static void isNotNull(Collection coll,ResponseCode responseCode){
        // 当集合为空 或者 集合的长度=0,抛出异常
        if(coll == null || coll.size() == 0){
            throw new BusinessException(responseCode);
        }
    }

    // 断言两个字符串相等
    public static void isEq(String str1,String str2,ResponseCode responseCode){
        if(!str1.equals(str2)){
            throw new BusinessException(responseCode);
        }
    }

    public static void isEqIgnoreCase(String str1,String str2,ResponseCode responseCode){
        if(!str1.equalsIgnoreCase(str2)){
            throw new BusinessException(responseCode);
        }
    }

    // 断言个数为0,那如果个数>0就要报错
    public static void isZero(int value,ResponseCode responseCode){
        if(value > 0){
            throw new BusinessException(responseCode);
        }
    }
}
